#include "Solution.h"

typedef struct list_element 
{
	solution sol;
	struct list_element *next;
} item;

typedef item *list;

/*PRIMITIVE*/
list emptyList(); 
int empty(list l);
solution head(list l);
list tail(list l);
list cons(list l, solution s);

/*NON PRIMITIVE*/
int length(list l);
solution elementAt(list l, int i);
list modifyElementAt(list l, solution s, int i);
list copy(list l);
list append(list l1, list l2);
list reverse(list l);
list insertInOrderSolution(list l, solution s, int* index); //int* pointer is used to chek at which index is put the solution
list keepFirstNElements(list l, int num);
int lastSolutionValue(list l);

void showList(list l); 
void showListValue(list l);